package edu.uoc.tds.pec3.cliente;

import edu.uoc.tds.pec3.comun.Factura;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;


/**
 *
 * @author JUAN ANTONIO
 */
public class PanelAltaFactura extends JPanel implements ActionListener {
    private Cliente cliente;
    private JLabel jlabel_AltaNuevaFactura;
    private JLabel jlabel_Evento;
    private JLabel jlabel_Proveedor;
    private JLabel jlabel_Concepto;
    private JLabel jlabel_FechaValor;
    private JLabel jlabel_Descripcion;
    private JLabel jlabel_Importe;
    private JComboBox jcombobox_Evento;
    private JComboBox jcombobox_Proveedor;
    private JComboBox jcombobox_Concepto;
    private JFormattedTextField jtextfield_FechaValor;
    private JTextArea jtextarea_Descripcion;
    private JTextField jtextfield_Importe;
    private JButton jbutton_Grabar;
    private JButton jbutton_Cancelar;

    public PanelAltaFactura(Cliente cliente){
        super();
        this.cliente = cliente;
        iniciarComponentes();
    }

    private void iniciarComponentes(){
        jlabel_AltaNuevaFactura = new JLabel("Alta de nueva factura en un evento");
        jlabel_Evento = new JLabel("Evento:", SwingConstants.RIGHT);
        jlabel_Proveedor = new JLabel("Proveedor:", SwingConstants.RIGHT);
        jlabel_Concepto = new JLabel("Concepto:", SwingConstants.RIGHT);
        jlabel_FechaValor = new JLabel("Fecha valor:", SwingConstants.RIGHT);
        jlabel_Descripcion = new JLabel("Descripción:", SwingConstants.RIGHT);
        jlabel_Importe = new JLabel("Importe:", SwingConstants.RIGHT);
        jcombobox_Evento = new JComboBox(cliente.getDescripcionesEventos().toArray());
        jcombobox_Proveedor = new JComboBox(cliente.getDescripcionesProveedores().toArray());
        jcombobox_Concepto = new JComboBox(cliente.getDescripcionesConceptos().toArray());
        jtextfield_FechaValor = new JFormattedTextField(new Date());
        jtextarea_Descripcion = new JTextArea(5, 20);
        jtextarea_Descripcion.setLineWrap(true);
        jtextarea_Descripcion.setWrapStyleWord(true);
        jtextfield_Importe = new JTextField(10);
        jbutton_Grabar = new JButton("Grabar factura");
        jbutton_Grabar.setFocusable(false);
        jbutton_Cancelar = new JButton("Cancelar");
        jbutton_Cancelar.setFocusable(false);

        setLayout(new BorderLayout());

        add(jlabel_AltaNuevaFactura, BorderLayout.NORTH);

        JPanel panelCentral = new JPanel(new GridLayout(6, 2, 10, 15));
        panelCentral.add(jlabel_Evento);
        panelCentral.add(jcombobox_Evento);
        panelCentral.add(jlabel_Proveedor);
        panelCentral.add(jcombobox_Proveedor);
        panelCentral.add(jlabel_Concepto);
        panelCentral.add(jcombobox_Concepto);
        panelCentral.add(jlabel_FechaValor);
        panelCentral.add(jtextfield_FechaValor);
        panelCentral.add(jlabel_Descripcion);
        JPanel jp0 = new JPanel(new GridLayout());
        jp0.add(jtextarea_Descripcion);
        panelCentral.add(jp0);
        panelCentral.add(jlabel_Importe);
        panelCentral.add(jtextfield_Importe);
        add(panelCentral, BorderLayout.CENTER);

        JPanel panelSur = new JPanel(new FlowLayout(FlowLayout.CENTER, 40, 10));
        panelSur.add(jbutton_Grabar);
        panelSur.add(jbutton_Cancelar);
        add(panelSur, BorderLayout.SOUTH);

        jbutton_Grabar.addActionListener(this);
        jbutton_Cancelar.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jbutton_Grabar){
            int importe = 0;

            try {
                importe = Integer.parseInt(jtextfield_Importe.getText());
                if (importe < 0) throw new NumberFormatException();

                Factura factura = new Factura
                        (cliente.getEventos().get(jcombobox_Evento.getSelectedIndex()),
                        cliente.getConceptos().get(jcombobox_Concepto.getSelectedIndex()),
                        cliente.getProveedores().get(jcombobox_Proveedor.getSelectedIndex()),
                        jtextarea_Descripcion.getText(),
                        (Date)jtextfield_FechaValor.getValue(),
                        importe, new Date());

                cliente.getRemotoPEC3().altaFactura(factura);
                cliente.setPanelCentral(new PanelInicial());

            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(this,
                        "Importe debe ser un número positivo.");
                jtextfield_Importe.setText("");

            } catch (RemoteException ex) {
                ex.printStackTrace();
            }


        } else if (e.getSource() == jbutton_Cancelar){
            cliente.setPanelCentral(new PanelInicial());
        }
    }
}
